package pers.agony.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.AuthenticationException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import pers.agony.entity.Result;
import pers.agony.exception.MyException;

/**
 * @author : Agony
 * @date : Created in 8:24 下午 2021/11/2
 * @Description:
 * @Modified By:
 * @version: : 1.0
 */
@RestControllerAdvice
public class MyExceptionAdvance {

    /**
     * 日志记录对象
     * MyExceptionAdvice 记录这个类
     * 记录日志的api, 记录日志文件。
     * info:    记录流程性的过程
     * debug:   记录关键数据， 订单的id, userToken, redisKey，看通知知道用户当运行状况
     * error:   记录异常信息
     *
     * 记录到数据库：
     *  记录关键数据的变更，银行转帐 ，A 有多少钱，B帐号有少钱，A -> 500，A转后余额： B转后余额
     *  将来有记录可查
     */

    private static final Logger logger = LoggerFactory.getLogger(MyExceptionAdvance.class);

    /**
     * 捕获取 MyException类型的异常，
     * 用这个方法来处理它
     */

    @ExceptionHandler(MyException.class)
    public Result HandleMyException(MyException e){
        logger.info("进入自定义异常处理，用户行为不规范！");
        // 返回给ajax 提示信息
        return new Result(false,e.getMessage());
    }

    @ExceptionHandler(AuthenticationException.class)
    public Result HandleAuthenticationException(AuthenticationException e){
        logger.info("没有此权限！");
        return new Result(false,"没有此权限！");
    }

    /**
     * 捕获取 Exception类型的异常，
     * 用这个方法来处理它
     */

    @ExceptionHandler(Exception.class)
    public Result HandleException(Exception e){
        // e.printStackTrace();
        logger.error("发生未知异常了",e);
        // 返回给ajax 提示信息
        return new Result(false,e.getMessage());
    }
}
